// 未完成
#include <bits/stdc++.h>
using namespace std;
#define MaxN 100005
long long mem[15]; // mem[i]表示i位数独特数的个数
long long f[15];   // f[i]表示1-i位数中，独特数有多少个
int x[11];         // 记录已经使用的数字
typedef long long LL;
void init() {
  mem[1] = 9;
  for (int i = 2; i <= 10; i++) {
    mem[i] = mem[i - 1] * (11 - i);
  }
  for (int i = 1; i <= 10; i++) {
    f[i] = f[i - 1] + mem[i];
  }
}

bool check(int k, int t) {
  memset(x, 0, sizeof(x));

  while (k > 0) {

    int ge = k % 10;
    x[ge]++;
    if (x[ge] > 1)
      return false;
    k /= 10;
  }

  return true;
}
// 计算k的第t个独特数
int jishu(int k, int t) {

  int main() {
    //   cout << check(33);
    //   cout << check(1236534);
    int n;
    cin >> n;
    init();
    for (int i = 1; i <= 10; i++) {
      cout << mem[i] << " ";
    }
    cout << endl;
    int wei = 0; // 第n个独特数的位数
    int ans = 0;
    for (int i = 1; i <= 10; i++) { // 找到第n个多特殊有几位
      if (n > f[i])
        wei = i;
    }

    int t = n - f[wei - 1]; // 第n个独特数是第几个wei位的独特数
    // 注意t可能为0
    long long L = 0;
    for (int i = 1; i <= wei - 1; i++) {
      L = L * 10 + (10 - i);
    }

    long long R = pow(10, wei + 1) - 1;
    long long ans = 0;
    while (L <= R) {
      LL mid = (L + R) / 2;
      if (check(mid, t)) {
        ans = mid;
        L = mid + 1;
      } else {
        R = mid - 1;
      }
    }
    cout << ans;
    return 0;
  }